博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ThinkPHP带表情无限级评论回复
阅读量:5097 次
发布时间:2019-06-13

本文共 5779 字,大约阅读时间需要 19 分钟。

今天就tp中(含表情)无限级评论回复做一个个人总结。

1.准备TP基本框架

2.数据库,数据表的建立

A.先说说数据库(表)的建立。

a-1,数据库:blog

a-2,数据表:bolg_comment. 建立如下:

CREATE TABLE IF NOT EXISTS `blog_comment` (  `id` int(10) NOT NULL AUTO_INCREMENT,  `content` varchar(500) NOT NULL,  `pid` int(10) NOT NULL,  `email` varchar(50) DEFAULT NULL,  `add_time` int(30) NOT NULL,  `author` varchar(30) NOT NULL,  `isShow` int(1) NOT NULL DEFAULT '0',  `ip` varchar(50) NOT NULL,  PRIMARY KEY (`id`)) ENGINE=InnoDB  DEFAULT CHARSET=utf8 AUTO_INCREMENT=12 ;
NSERT INTO `blog_comment` (`id`, `content`, `pid`, `email`, `add_time`, `author`, `isShow`, `ip`) VALUES(1, '路过,路过', 0, '', 0, '隔壁老王', 0, ''),(2, '暂停一下', 0, '', 0, '兔斯基', 0, ''),(3, '你好', 1, '', 0, '会飞的鱼', 0, ''),(4, 'helloword', 2, '', 0, '丘比龙', 0, ''),(5, 'hello', 3, '', 0, '蜡笔小新', 0, ''),(6, 'hellorword', 3, '', 1450247783, '漫步语林', 0, '0.0.0.0'),(7, '围观,你们继续', 2, '', 1450248001, '维尼熊', 0, '0.0.0.0'),(8, '[em_1]', 1, '', 1450248492, '小飞象', 0, '0.0.0.0'),(11, 'qqqq22222', 0, NULL, 1450772015, 'qq222222', 0, '127.0.0.1');

其中,content表:评论内容;pid表关联的父id;add_time表评论时间;author表评论作者;ip表发评论者的ip。

==================================================================================

B.接着就是TP框架,我选用的是:thinkphp_3.2.3_full版本,服务器Nginx,数据库MariaDB

b-1,我的应用名称:tper

b-1,数据库信息配置:tper/Application/Common/conf/config.php

'配置值' /* 大小写URL */ 'URL_CASE_INSENSITIVE' => false, /* 数据库设置 */ 'DB_TYPE' => 'mysql', 'DB_HOST' => 'localhost', 'DB_NAME' => 'blog', 'DB_USER' => 'root', 'DB_PWD' => 'root', 'DB_PORT' => '3306', 'DB_PREFIX' => 'blog_', /* 模块列表 */ 'MODULE_ALLOW_LIST' => array ('Home','Admin'), /* 默认模块 */ 'DEFAULT_MODULE' => 'Home', 'SHOW_PAGE_TRACE'=>true, // 'URL_MODEL' => 2,);

b-2,控制器:CommonController.class.php 和 IndexController.class.php

CommentList($pid = 0, $commentList = array(), $spac = 0); // var_dump($comment); $this->assign('commentList', $comment); $this->display(); // $this->display(); } //评论 public function addComment() { // var_dump(I('post.')); // $ip = get_client_ip(); // echo $ip; // $iplong = ip2long($ip); // echo '
'; // echo $iplong; $rules = array(//定义动态验证规则 array('comment', 'require', '评论不能为空'), array('username', 'require', '昵称不能为空'),// array('username', '3,15', '用户名长度必须在3-15位之间!', 0, 'length', 3), ); $data = array( 'content' => I("post.comment"), 'ip' => get_client_ip(), 'add_time' => time(), 'pid' => I('post.pid'), 'author' => I('post.username'), ); $comment = M("comment"); // 实例化User对象 if (!$comment->validate($rules)->create()){
//验证昵称和评论 exit($comment->getError()); }else{ $add = $comment->add($data); if($add){ $this->success('评论成功'); }else{ $this->error('评论失败'); } } } //评论列表 function CommentList($pid = 0, &$commentList = array(), $spac = 0) { static $i = 0; $spac = $spac + 1; //初始为1级评论 $List = M('comment')-> field('id,add_time,author,content,pid')-> where(array('pid' => $pid))->order("id DESC")->select(); // echo '
';                // var_dump($List);          foreach ($List as $k => $v) {            $commentList[$i]['level'] = $spac; //评论层级            $commentList[$i]['author'] = $v['author'];            $commentList[$i]['id'] = $v['id'];            $commentList[$i]['pid'] = $v['pid']; //此条评论的父id            $commentList[$i]['content'] = $v['content'];            $commentList[$i]['time'] = $v['add_time'];            // $commentList[$i]['pauthor']=$pautor;            $i++;            $this->CommentList($v['id'], $commentList, $spac);        }         return $commentList;      }}

其中评论列表的方法:“CommentList”,值得学习。

b-3.模板:View/Index/index.html

            
Thinkphp带表情的无限评论回复
评论
昵称
表情



{$vo.author}
{$vo.author}
回复{$vo.pauthor}
回复
{$vo.time|date="Y-m-d",###}
{$vo.content|reFace}

其中:

{$vo.content|reFace}
中的reFace方法如下:(tper/Application/Common/Common/function.php)
",$str); } return $str;}

还有一点注意:

""  这里是使用__ROOT__,而不是__APP__.不然表情图片会调用不成功。

当然还有其他文件,如js,css,images等。这里就不做细讲。

来源:

示例:

注意:下载后,不一定会执行成功,里面有些调用不一定正确。如:上面提到的__ROOT__的使用,而不是__APP__的使用。

如果优化代码,增加客户体验,可以做如下的代码处理。

思路:当客户选择“表情”图片后,<textarea>域里面展示的是代替字符,并不是当前的表情图片,只有当提交信息后才会显示。

处理:当鼠标离开<testarea>后,通过事件的到域中内容,然后通过Ajax处理,得到当前的"表情"图片。方法已有,如:

function reFace($str){    for($i=1;$i<76;$i++){        // $path = __URL__;        // echo $path;        $str = str_replace("[em_$i]","",$str);    }    return $str;}

适当处理即可。

转载于:https://www.cnblogs.com/wuheng1991/p/5331762.html

你可能感兴趣的文章
STL容器之vector
查看>>
数据中心虚拟化技术
查看>>
第二阶段冲刺-01
查看>>
BZOJ1045 HAOI2008 糖果传递
查看>>
JavaScript 克隆数组
查看>>
python3 生成器与迭代器
查看>>
git .gitignore 文件不起作用
查看>>
digitalocean --- How To Install Apache Tomcat 8 on Ubuntu 16.04
查看>>
【题解】[P4178 Tree]
查看>>
cer证书签名验证
查看>>
【深度学习】caffe 中的一些参数介绍
查看>>
QML学习笔记之一
查看>>
App右上角数字
查看>>
小算法
查看>>
新作《ASP.NET MVC 5框架揭秘》正式出版
查看>>
WPF中实现多选ComboBox控件
查看>>
读构建之法第四章第十七章有感
查看>>
Windows Phone开发(4):框架和页 转:http://blog.csdn.net/tcjiaan/article/details/7263146
查看>>
python asyncio 异步实现mongodb数据转xls文件
查看>>
TestNG入门
查看>>